﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Diagnostics;
//Librerias Arquitectura
using Com.Binaria.Core;
using Com.Binaria.Core.Base;
using Com.Binaria.Core.Dto;
using Com.Binaria.Core.Util;
using Com.Binaria.Core.Datos;
using Com.Binaria.Core.Exceptions;
using Com.Binaria.Core.Enumeracion;
//Librerias Proyecto
using Com.Binaria.SISCOB.Funcional.DTO;
using Com.Binaria.SISCOB.DTO;
using Com.Binaria.SISCOB.DAO;

namespace Com.Binaria.SISCOB.Dom
{
/// <summary>
///	clase de sucursal dom
/// </summary>
    public partial class ItemCartolaDom : IItemCartolaDom
{

       
        #region metodos publicos

	
	
    /// <summary>
    /// metodo que permite registrar elementos de tipo sucursal en el sistema
    /// </summary>
    /// <param name="p_Contexto">informacion del contexto</param>
    /// <param name="p_Sucursal">sucursal a registrar (insertar, actualizar o eliminar)</param>
    /// <param name="p_Accion">Accion a realizar</param>
        public ItemCartolaDTO ProbarRegistrar(ContextoDTO p_Contexto, ItemCartolaDTO p_ItemCartola)
	{
        //Prefijo del Metodo
        const String MPREFIX = " [ProbarRegistrar]";
        //Resultado accion insertar
        List<ItemCartolaDTO> listItemCartolaResultDTO = null;
        //ItemCartolaDTO itemCartolaResultDTO = null;

        try
        {
            //Registro log de inicio del proceso
            Factoria.Log.Info(CLASS_PREFIX + MPREFIX + EnumMessagesEntry.Inicio);

            //Valida que exista informacion en el objeto
            AssertNull.notNullOrEmpty(p_ItemCartola);

            if (p_ItemCartola.Tipo.Equals("C"))
            {
                listItemCartolaResultDTO = BuscarItemCartolaFiltro(p_Contexto, new ItemCartolaDTO() { IdCartola = p_ItemCartola.IdCartola, FchOperacion = p_ItemCartola.FchOperacion, NmrOperacion = p_ItemCartola.NmrOperacion });
            }
            if (p_ItemCartola.Tipo.Equals("A"))
            {
                listItemCartolaResultDTO = BuscarItemCartolaFiltro(p_Contexto, new ItemCartolaDTO() { IdCartola = p_ItemCartola.IdCartola, FchOperacion = p_ItemCartola.FchOperacion, Monto = p_ItemCartola.Monto, NmrOperacion = p_ItemCartola.NmrOperacion });
            }

            if (listItemCartolaResultDTO.Count == 0)
            {
                listItemCartolaResultDTO = RegistrarItemCartola(p_Contexto, new List<ItemCartolaDTO>() { p_ItemCartola }, EnumRegistrarAccion.Agregar);
            }
            else
            {
                p_ItemCartola.Id = listItemCartolaResultDTO[0].Id;
                listItemCartolaResultDTO = RegistrarItemCartola(p_Contexto, new List<ItemCartolaDTO>() { p_ItemCartola }, EnumRegistrarAccion.Modificar);
                listItemCartolaResultDTO.Add(p_ItemCartola);
            }

            //Registro log de ejecucion el termino del metodo
            Factoria.Log.Info(CLASS_PREFIX + MPREFIX + EnumMessagesEntry.Termino);
        }
        catch (ManagerException me)
        {
            throw (me);
        }
        catch (ArquitecturaException ae)
        {
            throw (ae);
        }
        catch (Exception ex)
        {
            //Registro log de ejecucion con problemas
            Factoria.Log.Info(CLASS_PREFIX + MPREFIX + EnumMessagesEntry.Ejecucion_Problemas);
            //Genero error
            throw new ManagerException(Factoria.GetMessage("DOM_ERROR_NO_MANEJADO"), ex);
        }
        return listItemCartolaResultDTO[0];
    }	
    #endregion metodos publicos

	}//End class SucursalDom
}//End namespace





